home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.OpenProm / RCS / boot.c,v < prev    next >
Text File  |  1991-01-13  |  5KB  |  232 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     91.01.13.02.26.28;  author dlong;  state Exp;
  11. branches ;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     91.01.13.02.15.07;  author dlong;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @First cut at functions for different sun4c PROM versions.
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @include <ctype.h> so we use the isspace macro instead of
  28. function call.
  29. @
  30. text
  31. @/*-
  32.  * boot.c --
  33.  *    Some PROM version specific functions which were too
  34.  *    complicated to be macros.
  35.  *
  36.  * Copyright (c) 1987 by the Regents of the University of California
  37.  *
  38.  * Permission to use, copy, modify, and distribute this
  39.  * software and its documentation for any purpose and without
  40.  * fee is hereby granted, provided that the above copyright
  41.  * notice appear in all copies.  The University of California
  42.  * makes no representations about the suitability of this
  43.  * software for any purpose.  It is provided "as is" without
  44.  * express or implied warranty.
  45.  *
  46.  *
  47.  */
  48. #ifndef lint
  49. static char rcsid[] =
  50. "$Header: /sprite/src/boot/netBoot.OpenProm/RCS/boot.c,v 1.1 91/01/13 02:15:07 dlong Exp Locker: dlong $ SPRITE (Berkeley)";
  51. #endif lint
  52.  
  53. #include "boot.h"
  54. #include <string.h>
  55. #include <ctype.h>
  56.  
  57. #define min(x,y)    ((x) < (y) ? (x) : (y))
  58.  
  59.  
  60. /*
  61.  *----------------------------------------------------------------------
  62.  *
  63.  * PrintBootCommand --
  64.  *
  65.  *    Print out the boot command, as expanded by PROM defaults.
  66.  *
  67.  * Results:
  68.  *    None.
  69.  *
  70.  * Side effects:
  71.  *    None.
  72.  *
  73.  *----------------------------------------------------------------------
  74.  */
  75.  
  76. void
  77. PrintBootCommand()
  78. {
  79.     int i;
  80.  
  81.     if (RomVersion >= 2) {
  82.     printf("%s %s\n", *romp->bootpath, *romp->bootargs);
  83.     } else if (romp->v_bootparam) {
  84.     i = 0;
  85.     while ((*romp->v_bootparam)->bp_argv[i]) {
  86.         printf("%s ", (*romp->v_bootparam)->bp_argv[i]);
  87.         ++i;
  88.     }
  89.     printf("\n");
  90.     } else {
  91.     printf("(NULL)\n");
  92.     }
  93.  
  94. }
  95.  
  96.  
  97. /*
  98.  *----------------------------------------------------------------------
  99.  *
  100.  * BootDevName --
  101.  *
  102.  *    Get boot device name from PROM data structures.
  103.  *
  104.  * Results:
  105.  *    Pointer to static character buffer, or string in PROM.
  106.  *
  107.  * Side effects:
  108.  *    None.
  109.  *
  110.  *----------------------------------------------------------------------
  111.  */
  112.  
  113. char *
  114. BootDevName()
  115. {
  116.     static char buf[64];
  117.     char *p, *q;
  118.     int n;
  119.  
  120.     if (RomVersion >= 2) {
  121.     /*
  122.      * With ROM version 2, bootpath contains the path of the
  123.      * boot device.  The dev(ctrl,unit,part) style is no
  124.      * longer fully supported.  v_bootparam is not filled
  125.      * in.
  126.      */
  127.     return *romp->bootpath;
  128.     } else {
  129.     /*
  130.      * With older ROM versions, v_bootparam is filled in,
  131.      * and bp_argv[0] contains the name of the boot device.
  132.      * It looks like: dev(ctrl,unit,part)filename.
  133.      * The filename may not be stripped off the end, so
  134.      * do it here, even though v_open doesn't care.
  135.      */
  136.     p = (*romp->v_bootparam)->bp_argv[0];
  137.     q = strchr(p, ')');
  138.     if (q) {
  139.         n = min(q - p + 1, sizeof buf - 1);
  140.         strncpy(buf, p, n);
  141.         return buf;
  142.     } else {
  143.         return p;
  144.     }
  145.     }
  146. }
  147.  
  148.  
  149. /*
  150.  *----------------------------------------------------------------------
  151.  *
  152.  * BootFileName --
  153.  *
  154.  *    Get boot file name from PROM data structures.
  155.  *
  156.  * Results:
  157.  *    Pointer to static character buffer, or string in PROM.
  158.  *
  159.  * Side effects:
  160.  *    None.
  161.  *
  162.  *----------------------------------------------------------------------
  163.  */
  164.  
  165. char *
  166. BootFileName()
  167. {
  168.     static char buf[64];
  169.     char *p, *q;
  170.  
  171.     if (RomVersion >= 2) {
  172.     /*
  173.      * bootargs contains the filename and arguments.
  174.      * Just copy the filename here; ignore arguments.
  175.      */
  176.     p = buf;
  177.     q = *romp->bootargs;
  178.     while (*q && !isspace(*q)) {
  179.         *p++ = *q++;
  180.     }
  181.     *p = '\0';
  182.     return buf;
  183.     } else {
  184.     /*
  185.      * bp_name contains the filename without arguments.
  186.      */
  187.     return ((*romp->v_bootparam)->bp_name);
  188.     }
  189. }
  190.  
  191.  
  192. /*
  193.  *----------------------------------------------------------------------
  194.  *
  195.  * Routine --
  196.  *
  197.  *    Print out panic strings, and return to monitor.
  198.  *
  199.  * Results:
  200.  *    None.
  201.  *
  202.  * Side effects:
  203.  *    Should not return.  Aborts to the monitor.
  204.  *
  205.  *----------------------------------------------------------------------
  206.  */
  207.  
  208. void panic(string)
  209.     char *string;
  210. {
  211.     printf("Panic: %s\n", string);
  212.     /*
  213.      * This could be (*romp->v_exit_to_mon)() I guess.
  214.      * What is the difference?  This one is what L1-a does,
  215.      * I think.
  216.      */
  217.     (*romp->v_abortent)();
  218. }
  219. @
  220.  
  221.  
  222. 1.1
  223. log
  224. @Initial revision
  225. @
  226. text
  227. @d20 1
  228. a20 1
  229. "$Header: /sprite/src/boot/netBoot/RCS/main.c,v 1.1 90/10/10 15:13:28 jhh Exp Locker: jhh $ SPRITE (Berkeley)";
  230. d25 1
  231. @
  232.